iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
1
自我挑戰組

Go從新學系列 第 11

[DAY 11]GO 的 切片(Slice)

  • 分享至 

  • xImage
  •  

由於陣列長度在建立後就不能更動,Go 提供切片 (slice) 這種容器。

切片和陣列相似,同樣也是線性的、以數字為索引,索引值同樣從 0 開始。

package main

import (
	"fmt"
)

func main() {
	slice1 := []string{"thresh","nami","rakan","bard"}

	fmt.Println(slice1)
}

與array不一樣的地方是,slice不需要預設陣列長度

也可以利用slice來製作二維陣列

package main

import (
	"fmt"
)

func main() {
	slice1 := [][]float64{
		[]float64{1, 2, 3},
		[]float64{4, 5, 6},
	}

	for i := 0; i < 2; i++ {
		for e := 0; e < 3; e++ {
			fmt.Println(slice1[i][e])
		}
	}
}

執行結果

1
2
3
4
5
6

或者使用make動態產生一個slice

package main

import "fmt"

func main() {
	slice1 := make([]int , 6)

	for i := 0; i <len(slice1) ; i++{
		n := i + 1
		slice1[i] = n * n
	}

	for _ , e := range slice1{
		fmt.Println(e)
	}
}

執行結果

1
4
9
16
25
36
  • 新增索引元素

若要改變切片大小 我們就要用到append函式

package main

import "fmt"

func main(){
	slice1 := []int{1,2,3,4,5}

	slice1 = append(slice1 ,6, 7)

	for _ , e := range slice1{
		fmt.Print(e," ")
	}
}

func append(s []T, vs ...T)

append 的第一個參數 s 是一個類型為 T 的數組,其餘類型為 T 的值將會添加到 slice。

1 2 3 4 5 6 7 

若需要減少某個切片的元素

就需要一點技巧

package main

import "fmt"

func main(){
	slice1 := []int{0,1,2,3,4,5}

	slice1 = append(slice1[0:2],slice1[3:6]...)

	for _ , e := range slice1{
		fmt.Print(e," ")
	}
}

append裡選擇子切片從索引0(包含) 到索引2(不包含)+從索引3(包含) 到索引6(不包含)

執行結果

0 1 3 4 5 

上一篇
[DAY 10]GO 的 陣列(Array)
下一篇
[DAY 12]GO 裡使用map
系列文
Go從新學26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言